前面有提到,我們要讓任何人都可以註冊並且參與翻譯文章,
但是如果有人來亂貼廣告或是做了什麼壞壞的事呢?
沒錯,為了避免這種情形發生,
我們現在將要實作後台的功能。
功能非常的簡單,除了跟一般user一樣之外,
他多了可以讓文章發佈的功能,以及對所有文章都有編輯的權限。
(後面會再提到單對view做權限限制是不夠的,看不到不代表你碰不到,不急不急,之後會有一系列介紹cancancan)
所以今天要做的事情是:
這兩個是大家常用來實做後台功能的gem,
優點是建制很快,但要客制化很困難,假如是不太重要的專案或是你認為調整這些東西很好玩,
那就用吧!
這裡我們將直接手動刻一個後台出來。
這裡操作的是跟前提一樣的po文,也就是說他們會__共用一個資料庫__
所以我們會用繼承的方式來做admin的post model
這裡只要執行這行指令就可以幫我們生成所有需要的頁面:
rails g scaffold admin/post --migration=false --parent=Post
Scaffold會幫我們從lib/template底下去產生頁面,parent代表會繼承自原本post的model,
而--migration = false則不會讓這個指令去生成migration,這樣就不會動到原本的資料庫了。
只要加入一行就可以完工了
namespace :admin do
resources :posts
end
現在就可以去後台看看啦!
不過你會發現前台的navbar還在,按一下上面的又會回到前台頁面去,
這時候我們必須做一個專門的layouts:
只要在app/views/layouts底下新增一個admin.html.erb頁面,
<title>UnitedIssues</title>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<%= csrf_meta_tags %>
<%= render partial: "common/flash" %>
<div class="container main">
<%= yield %>
<%= debug(params) if Rails.env.development? %>
</div>
接著在剛剛的admin posts controller中加入layout 'admin',
就可以了!
參考資料:
http://guides.ruby-china.org/layouts_and_rendering.html
http://tonytonyjan.net/slides/2014-04-25-better-rails-backstage
長遠來看的話,維護起來真的方便很多,
而起比起直接用第三方的gem,這樣子能懂得的東西也會比較多,
一樣是個人喜好,在網路上看到大兜的slide受益良多,
一方面也是寫案子有感,
下一篇將介紹cancan來實做權限管理,否則現在的後台其實只要打個網址就進去了XD